پروژه ساعت دیجیتال با میکرو کنترلر Atmega8
این پروژه یکی از ساده ترین ساعت های دیجیتال با میکروکنترلر Atmega8L می باشد .در این پروژه از RTC داخلی میکرو استفاده شده است و ولتاژ تغذیه آن 3 ولت است .درضمن این میکرو از نوع L است یعنی این نوع میکرو با ولتاژ پایین کار می کند. ولی اگر میکرو از این نوع نباشد فقط کافیست ولتاژ تغذیه را به 5 ولت افزایش داد . برای نمایش اعداد این ساعت از دو سون سگمنت دوبل آند مشترک مولتی پلکس استفاده شده است که می توان به جای آن از یک سون سگمنت 4 تایی استفاده کرد. برای تنظیم این ساعت دیجیتال از 2 میکرو سوئیچ استفاده شده است که یکی از آن ها برای تنظیم دقیقه و دیگری برای تنظیم ساعت است .این ساعت به دلیل استفاده از RTC داخلی میکرو بسیار دقیق است به طوری که هر 1000000 ساعت 0.1 ثانیه خطا دارد .جریان مصرفی RTC داخلی از جریان مصرفی یک دیود LEDکمتر است . ( اگر از باتری استفاده می کنید نیازی به خازن نیست )
(ولتاژ تغذیه 0 تا 9 ولت و 250 میلی آمپر)
قطعات :
1- میکروکنترلر Atmega8
2- سون سگمنت دوبل آند مشترک
3- کریستال ساعت
4- مقاومت 330 اهم
5- خازن 100nF (در صورت استفاده از ترانس به عنوان صافی)
6- منبع تغذیه 3 تا 5 ولت
7- میکرو سوئیچ ( 2 پایه یا 4 پایه )
نقشه شماتیک مدار با نرم افزار Proteus 7.6
کدهای مربوط به ساعت :
'---------------------------------------------------------------
'Simple Digital Clock With 7-Segment
'Programmer: Majid Alinia (Savis_20@Yahoo.COM) MajidAlinia.Blogfa.COM
'Compiler : BASCOM 2.02.8.0
'Creation Date: May 02, 2011 (1390.02.12)
'Copyright: (C) 2011 By WWW.MajiAlinia.Blogfa.COM
'License: This Is A Free Firmware, Ver: 1.00 (Comm. Anode)
'---------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000 'Internal RC
$hwstack = 64
$swstack = 64
$framesize = 64
'RTC
Config Clock = Soft , Gosub = Sectic
Enable Interrupts
Time$ = "12:00:00"
'I/O
Config Portd = Output 'A-G (Data)
Config Portc = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Output
'Set Pullup Resistor For Setting Key's
Set Portb.0
Set Portb.1
'Aliases
Dataport Alias Portd
Comm Alias Portc
Hour_key Alias Pinb.0
Min_key Alias Pinb.1
Second_led Alias Portb.2
'Variables
Dim Temp As Byte
Dim Temp2 As Byte
Dim Scnd As Byte
Dim Rtc_run As Byte
Dim S As Bit
Dim Dp As Bit
'Declaration
Declare Sub Keyscan
Declare Sub Refresh
Declare Sub Send
Declare Sub Wait4key
Declare Sub Blink_sec
'Wait 4 RTC Start
'Comm. Anode
'Hour Key
'Minute Key
'Blink Sec
Comm = &H0F 'Prompt
Do
If Rtc_run > 0 Then Exit Do
Loop
'Main Prog Start Here:
Do
Call Keyscan
Call Refresh
Call Blink_sec
Loop
End
Sub Keyscan
If Hour_key = 0 Then
Incr _hour
If _hour > 23 Then _hour = 0
Call Wait4key
End If
If Min_key = 0 Then
Incr _min
If _min > 59 Then _min = 0
Call Wait4key
End If
End Sub
Sub Refresh
Comm = &B1000 : Dp = 0 : Temp = _hour \ 10 : Call Send
Comm = &B0100 : Dp = 1 : Temp = _hour Mod 10 : Call Send
Comm = &B0010 : Dp = 0 : Temp = _min \ 10 : Call Send
Comm = &B0001 : Dp = 0 : Temp = _min Mod 10 : Call Send
End Sub
Sub Send
Dataport = Lookup(temp , Segdata)
If Dp = 1 Then
Portd.7 = S
Else
Portd.7 = 1
End If
Waitms 4
Dataport = &HFF
End Sub
Sub Wait4key
For Temp2 = 1 To 25
Call Refresh
Next
End Sub
Sub Blink_sec
Incr Scnd
If Scnd > 63 Then Scnd = 0
If Scnd > 0 And Scnd < 31 Then
S = 1
Else
S = 0
End If
End Sub
Segdata:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000
Data &B10011001 , &B10010010 , &B10000010 , &B11111000
Data &B10000000 , &B10010000
Sectic:
Incr Rtc_run
Return
جهت بهتر شدن سایت ممنون میشم حمایتم کنید
:: موضوعات مرتبط:
برق ,
,